/***
 *                    _ooOoo_
 *                   o8888888o
 *                   88" . "88
 *                   (| -_- |)
 *                    O\ = /O
 *                ____/`---'\____
 *              .   ' \\| |// `.
 *               / \\||| : |||// \
 *             / _||||| -:- |||||- \
 *               | | \\\ - /// | |
 *             | \_| ''\---/'' | |
 *              \ .-\__ `-` ___/-. /
 *           ___`. .' /--.--\ `. . __
 *        ."" '< `.___\_<|>_/___.' >'"".
 *       | | : `- \`.;`\ _ /`;.`/ - ` : | |
 *         \ \ `-. \_ __\ /__ _/ .-` / /
 * ======`-.____`-.___\_____/___.-`____.-'======
 *                    `=---='
 *
 * .............................................
 *          佛祖保佑             永无BUG
 *@author wwh
 *@date 2022年07月22日15:13
 */
package com.bm.server.service.impl;

import com.bm.server.dto.HavegiDto;
import com.bm.server.dto.HavegilogDto;
import com.bm.server.vo.R;
import com.bm.server.dao.HavegiDao;
import com.bm.server.dao.HavegilogDao;
import com.bm.server.entity.Havegilog;
import com.bm.server.service.intf.HavegilogService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class HavegilogServiceImpl implements HavegilogService {
    @Resource
    private HavegilogDao havegilogDao;
    @Resource
    private HavegiDao havegiDao;
    @Override
    public R giveHavegiLog(HavegilogDto dto) {
        //判断dto是否有值
        if (dto != null){
            //查询礼物拥有表，判断自己是否拥有要送出的礼物
            HavegiDto havegiDto = havegiDao.selectHavegi(dto.getUid(), dto.getTid());
            if(havegiDto != null){
                //如果自己拥有礼物，判断自己礼物的数量是否大于要送出礼物的数量
                if (havegiDto.getNum() >= dto.getNum()){
                    //自己拥有的礼物数量大于要送出的礼物数量
                    //查看对方是否拥有此礼物
                    HavegiDto havegiDto1 = havegiDao.selectHavegi(dto.getDid(), dto.getTid());
                    if (havegiDto1 != null){
                        //对方拥有此礼物,在对方礼物拥有表中更新礼物
                        havegiDao.updateHavgi(havegiDto1.getNum()+dto.getNum(),havegiDto1.getId());
                    }else {
                        //对方未拥有此礼物,在对方礼物拥有表中添加礼物
                        havegiDao.insertHavgi(dto.getDid(),dto.getNum(), dto.getTid());
                    }

                    //在自己拥有礼物表中减去礼物
                    if (havegiDto.getNum() == dto.getNum()){
                        //自己礼物拥有表中的此礼物数量与送出的礼物数量相等
                        havegiDao.delHavgi(havegiDto.getId());
                    }else {
                        //自己礼物拥有表中的此礼物数量大于送出的礼物数量
                        havegiDao.updateHavgi(havegiDto.getNum()-dto.getNum(),havegiDto.getId());
                    }

                    //记录送礼物日志
                    int insert = havegilogDao.insert(new Havegilog(dto.getUid(), dto.getDid(), dto.getTid(), dto.getNum()));
                    if (insert > 0){
                        return R.ok();
                    }
                }else if (havegiDto.getNum() < dto.getNum()){
                    //自己拥有的礼物数量小于要送出的礼物数量,
                    return R.fail("你未拥有如此数量的礼物，快去充值吧");

                }

            }else {
                return R.fail("你未拥有此礼物，快去充值吧");
            }

        }
        return R.fail("请输入正确的值");
    }
}
